In dieser Lerneinheit geht es um die Data Manipulation Language, kurz DML. Außerdem schauen wir uns die Data Control Language, DCL, an. Mit DML kann man Daten einfügen, ändern oder löschen. Wird ein neuer Studierender aufgenommen, wird dieser in die Datenbank eingetragen. Ändert sich der Name einer Person, wird der bestehende Eintrag angepasst. Bei einer Exmatrikulation wird der Datensatz gelöscht. DML ist der Teil von SQL, mit dem direkt auf die Inhalte einer Datenbank zugegriffen wird. Der Befehl INSERT fügt neue Datensätze in eine Tabelle ein. Angenommen, ein Studierender mit dem Namen Meier und der Matrikelnummer zwei-sieben-eins-zwei-drei soll in die Tabelle aufgenommen werden, dann kann dies mit einem INSERT-Befehl geschehen. Es ist auch möglich, mehrere Einträge gleichzeitig einzufügen, zum Beispiel für Schulz und Schmidt. Dabei werden die Werte mit Kommata getrennt. Lässt man die Spaltennamen weg, müssen die Werte genau in der Reihenfolge angegeben werden, wie sie in der Tabelle definiert sind. Für jede Spalte ist dann ein Wert erforderlich. INSERT kann dazu genutzt werden, Daten aus einer bestehenden Tabelle in eine andere zu kopieren. Wenn beispielsweise alle Datensätze aus einer alten Studententabelle in eine neue übernommen werden sollen, dann geht das über INSERT und SELECT. Das eignet sich für Backups oder Tests, ohne die Originaldaten zu verändern. Mit dem Befehl UPDATE lassen sich vorhandene Daten ändern. Zum Beispiel: Ein Studierender mit der Matrikelnummer zwei-sieben-eins-zwei-vier ändert seinen Namen auf Meier. Man kann auch mehrere Felder gleichzeitig aktualisieren, etwa Vorname, Nachname und Geburtsdatum. Es sind auch komplexere Änderungen möglich. Wenn zum Beispiel alle Bestellungen eines Kunden mit dem Namen Meier auf den Status „Versendet“ gesetzt werden sollen, kann dies über eine Verknüpfung mehrerer Tabellen erfolgen. Auch Preisänderungen lassen sich mit UPDATE durchführen. Möchte man zum Beispiel alle Preise in der Kategorie Elektronik um zehn Prozent erhöhen, dann wird der neue Preis auf Basis des bisherigen Preises berechnet. So lassen sich viele Datensätze effizient und automatisch anpassen. DELETE wird verwendet, um gezielt bestimmte Zeilen aus einer Tabelle zu löschen. Ein Beispiel: Ein Studierender mit der Matrikelnummer zwei-sieben-eins-zwei-drei soll aus der Tabelle Student entfernt werden. Dazu lautet der Befehl DELETE FROM Student WHERE Matrikelnummer gleich zwei-sieben-eins-zwei-drei. Die Struktur der Tabelle bleibt dabei erhalten. Mit einer WHERE-Klausel lässt sich genau festlegen, welche Zeilen gelöscht werden. Wenn diese Klausel fehlt, werden alle Zeilen der Tabelle entfernt. Ein Nachteil von DELETE ist, dass es langsamer ist, weil jede Zeile einzeln gelöscht und protokolliert wird. Der Vorteil: Man kann die Löschung mit einem ROLLBACK-Befehl rückgängig machen, solange man sich noch in der gleichen Transaktion befindet. TRUNCATE TABLE ist eine Alternative zu DELETE, wenn man schnell alle Inhalte einer Tabelle entfernen möchte. Beispiel: Der Befehl TRUNCATE TABLE Student entfernt alle Daten aus der Tabelle Student, aber lässt deren Struktur unangetastet. Eine WHERE-Bedingung gibt es hier nicht, weil immer der gesamte Inhalt gelöscht wird. Außerdem kann ein TRUNCATE-Befehl nicht rückgängig gemacht werden. DROP TABLE löscht nicht nur den Inhalt, sondern die Struktur der Tabelle. Wenn man DROP TABLE Student ausführt, wird die Tabelle Student mitsamt aller Spalten und Einträge entfernt. Dieser Vorgang kann nicht rückgängig gemacht werden. Danach ist die Tabelle endgültig gelöscht. Diese Folie zeigt, wann welche Löschmethode sinnvoll ist. Mit DELETE kann ein einzelner Studierender mit der Matrikelnummer zwei-sieben-eins-zwei-drei aus der Tabelle Student entfernt werden. Mit TRUNCATE kann man alle Einträge aus einer Tabelle Bestellung löschen, um sie zum Beispiel neu zu befüllen. "Drop" verwendet man, wenn eine Tabelle wie etwa alte Produkte nicht mehr gebraucht wird und komplett entfernt werden soll, inklusive Struktur. Also nochmals eine Zusammenfassung, wann man welchen Lösch-Befehl verwenden soll. DELETE ist hilfreich, wenn man einzelne Zeilen gezielt löschen möchte und dabei die Möglichkeit haben will, den Vorgang rückgängig zu machen. TRUNCATE ist nützlich, wenn man sicher ist, dass alle Daten entfernt werden sollen, aber die Struktur erhalten bleibt. "Drop" wird verwendet, wenn sowohl die Daten als auch die Struktur endgültig gelöscht werden sollen. DCL steht für Data Control Language. Sie ist ein weiterer Teil von SQL und legt fest, wer auf welche Daten zugreifen darf und welche Aktionen erlaubt sind. Die Data Control Language besteht aus zwei Hauptbefehlen: GRANT, um Rechte zu vergeben, und REVOKE, um sie wieder zu entziehen. Wenn zum Beispiel ein Tutor einem Hilfsassistenten das Recht gibt, Noten in die Tabelle Prüfungen einzutragen, geschieht das mit dem Befehl GRANT. Ändert sich die Rolle des Hilfsassistenten, und er soll künftig nur noch Leserechte besitzen, wird das Schreibrecht mit REVOKE entzogen. Mit GRANT lassen sich Rechte genau steuern auch abhängig davon, von wo ein Benutzer zugreift. Ein Zugriff von überall wird mit at Prozent erlaubt. Ein Zugriff aus einem bestimmten Netzwerk, zum Beispiel dem Hochschulnetz, wird mit at eins-neun-zwei Punkt eins-sechs-acht Punkt eins Punkt Prozent definiert. Eine Einschränkung auf eine bestimmte Domain, etwa ein Unternehmensnetzwerk, erfolgt mit at company Punkt com. Wenn man zusätzlich "WITH GRANT OPTION" angibt, darf der Benutzer die erhaltenen Rechte sogar an andere weitergeben. Ein Benutzer erhält Leserechte auf die Studierendendaten, darf aber nur von seinem eigenen Rechner aus zugreifen. Ein zweiter Benutzer bekommt das Recht, sich weltweit zu verbinden, und darf zusätzlich Daten einfügen und ändern. Ein Administrator mit fester IP-Adresse bekommt alle Rechte auf die gesamte Datenbank, wobei der Zugriff nur von dieser einen Adresse erlaubt ist. Ein weiterer Benutzer darf ausschließlich Daten löschen, und das nur innerhalb eines bestimmten Subnetzes. Ein Benutzer mit fester IP-Adresse darf nur auf eine bestimmte Spalte zugreifen, zum Beispiel auf die Noten in der Prüfungstabelle. Mehreren Benutzern kann man gleichzeitig Rechte geben – etwa einem lokalen und einem entfernten Nutzer, die beide auf Kursdaten zugreifen dürfen. Auch gespeicherte Prozeduren lassen sich schützen: Ein Benutzer aus einem Unternehmen darf eine bestimmte Funktion zur Notenberechnung ausführen. Ein Superadmin kann sogar neue Benutzer anlegen unabhängig davon, wo er sich befindet. Ein Benutzer aus dem internen Netzwerk darf temporäre Tabellen erstellen, zum Beispiel zur Zwischenspeicherung von Analyseergebnissen. Ein anderer Benutzer bekommt das Recht, auf Studierendendaten zuzugreifen und dieses Recht auch an andere weiterzugeben. Ein weiterer Nutzer darf eine gespeicherte Prozedur zur Durchschnittsberechnung ausführen. Ein Administrator mit fester IP-Adresse erhält die Berechtigung, genau diese Prozedur zu ändern. Wenn ein Benutzer das Team verlässt, verliert er den Zugriff auf Studierendendaten. Ein anderer darf keine Änderungen mehr an den Daten vornehmen, sondern nur noch lesen. Ein Administrator, der bisher aus dem Verwaltungsnetzwerk Zugriff hatte, verliert alle Rechte – zum Beispiel am Ende eines Projekts. Ein Nutzer aus einem bestimmten Subnetz darf keine Lehrerdaten mehr löschen, um versehentliche Löschungen zu vermeiden. Ein Benutzer darf die Spalte Noten in den Prüfungsdaten nicht mehr sehen – etwa, weil er nicht mehr prüfungsberechtigt ist. Zwei Benutzer verlieren gemeinsam das Recht, Kursdaten zu lesen und zu ändern – einer lokal, der andere aus dem Netzwerk der Hochschule. Ein externer Nutzer darf eine gespeicherte Prozedur zur Notenberechnung nicht mehr ausführen. Einem Superadmin wird das Recht entzogen, neue Benutzer anzulegen wie etwa wegen eines Wechsels im Team. Ein Benutzer aus dem internen Netzwerk darf keine temporären Tabellen mehr erstellen, möglicherweise weil sein Projekt beendet ist. Ein anderer darf seine erhaltenen Rechte nicht mehr weitergeben. Benutzer eins verliert den Zugriff auf die gespeicherte Prozedur zur Notenberechnung. Und ein Administrator darf diese Prozedur nicht mehr ändern oder neu kompilieren.